<?php
 	
 	require_once __DIR__.'/../file/Files.php';
 	include_once __DIR__.'/filter/Priority.php';

	
	abstract class LogAbstract
	{
		protected $_filters = array();		// Log 출력 필터
		protected $_format;					// Log 출력 포멧
		
		
		/**
		 * 필터 추가
		 *   - Priority 객체를 넘겨주면 곧바로 필터에 추가가 되고 int형을 넘겨주면 새로운 Priority 객체를 생성후 필터에 추가 
		 * @param Priority OR int $filter
		 * @return void
		 */
		public function addFilter(IFilter $filter)
		{
			$this->_filters[] = $filter;
		}
		
		
		/**
		 * Log출력 Fotmat을 셋팅합니다.
		 */		
		public function setFormat(FormatInterface $format)
		{
			$this->_format = $format;
		}
		
		/**
		 * Log 출력
		 * 
		 * @param array $event
		 * @return void
		 */
		public function filter($event)
		{
			// 설정된 filter를 거쳐서 filter 조건에 맞는 event만 출력시킵니다.
			foreach($this->_filters as $filter)
			{
				if(!$filter->accept($event))
				{
					return;
				}
			}
			$this->_write($event);
		}
		
		public abstract function write($msg, $priority=7);
		
		protected abstract function _write($event);
	}
?>
